package be.groept.ace.cursusplanning.model.strategy;

import java.util.ArrayList;
import java.util.List;

import be.groept.ace.cursusplanning.model.AangebodenCursus;
import be.groept.ace.cursusplanning.model.Cursist;
import be.groept.ace.cursusplanning.model.strategy.regels.BehoortTotOpleidingCursist;
import be.groept.ace.cursusplanning.model.strategy.regels.GeenUurroosterOverlappingenRegel;
import be.groept.ace.cursusplanning.model.strategy.regels.GenoegPlaatsRegel;
import be.groept.ace.cursusplanning.model.strategy.regels.SamenstellingsRegel;
import be.groept.ace.cursusplanning.model.strategy.regels.SomVanStudiepuntenRegel;
import be.groept.ace.cursusplanning.model.strategy.regels.VolgelijkheidsRegel;

public class GroeptAangebodenCursussenSamenstellingRegelsStrategy implements AangebodeCursussenSamenstellingsRegelsStrategy{

	private List<SamenstellingsRegel> regels;
	
	public GroeptAangebodenCursussenSamenstellingRegelsStrategy() {
		regels = new ArrayList<SamenstellingsRegel>();
	}
	
	@Override
	public boolean magZichInschrijven(Cursist cursist, AangebodenCursus aangebodenCursus) {
		
		regels.add(new BehoortTotOpleidingCursist());
		regels.add(new SomVanStudiepuntenRegel());
		regels.add(new GeenUurroosterOverlappingenRegel());
		regels.add(new VolgelijkheidsRegel());
		regels.add(new GenoegPlaatsRegel());
		

		for(SamenstellingsRegel regel: regels) {
			if(!regel.voldaan(cursist, aangebodenCursus)) {
				return false;
			}
		}
		return true;
	}
	
}
